$(function(){
    Popper.Defaults.modifiers.computeStyle.gpuAcceleration = false;

    if ($(window).width() < 769) {
        $('body').addClass('body-small')
    } else {
        $('body').removeClass('body-small')
    }



    $.ajax({
        type: 'get',
        url: "/menu" ,
        data: {} ,
        success: function (data) {
            var array = [];
            for (var da in data ){
                array.push(data[da]);
            }
            // recuions  下面的方法递归生成dom 支持无限级别
            var  html = recuions(array);
            $('#side-menu').append(html);
            var sideMenu = $('#side-menu').metisMenu();

            // 菜单的触发事件
            menuindex();
            $("#side-menu a").on("click",function(){
                return menuItem(this);
            });
        }
    });


    function recuions(array){
        var strHtml = "";
        for (var i in array){
            strHtml += '<li>'
            strHtml += '<a href="'+ array[i].url +'" ><i class="'+array[i].icon+'"></i> <span class="nav-label">'+array[i].name+'</span>'
            if(array[i].children != null) {
                strHtml += '<span class="fa arrow"></span></a>'
                strHtml += menuScurion(array[i].children);
            }
            strHtml += '</li>'
        }
        return strHtml;
    }

    /**
     *  递归遍历数据 赋值
     * @param arry
     * @returns {string}
     */
    function menuScurion(arry){
        if(arry == undefined && arry ==null){
            return "";
        }
        var str = "";
        str += '<ul class="nav nav-second-level collapse">'
        for (var i in arry) {
            str += '<li><a  href="'+arry[i].url+'">'+arry[i].name+'</a>'
            if(arry[i].children != undefined && arry[i].children !=null){
                str += menuScurion(arry[i].children);
            }
            str+'</li>'
        }
        str += '</ul>';
        return str;
    };


    //计算元素集合的总宽度
    function calSumWidth(elements) {
        var width = 0;
        $(elements).each(function() {
            width += $(this).outerWidth(true);
        });
        return width;
    }


    //滚动到指定选项卡
    function scrollToTab(element) {
        var marginLeftVal = calSumWidth($(element).prevAll()),
            marginRightVal = calSumWidth($(element).nextAll());
        // 可视区域非tab宽度
        var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
        //可视区域tab宽度
        var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
        //实际滚动宽度
        var scrollVal = 0;
        if ($(".page-tabs-content").outerWidth() < visibleWidth) {
            scrollVal = 0;
        } else if (marginRightVal <= (visibleWidth - $(element).outerWidth(true) - $(element).next().outerWidth(true))) {
            if ((visibleWidth - $(element).next().outerWidth(true)) > marginRightVal) {
                scrollVal = marginLeftVal;
                var tabElement = element;
                while ((scrollVal - $(tabElement).outerWidth()) > ($(".page-tabs-content").outerWidth() - visibleWidth)) {
                    scrollVal -= $(tabElement).prev().outerWidth();
                    tabElement = $(tabElement).prev();
                }
            }
        } else if (marginLeftVal > (visibleWidth - $(element).outerWidth(true) - $(element).prev().outerWidth(true))) {
            scrollVal = marginLeftVal - $(element).prev().outerWidth(true);
        }
        $('.page-tabs-content').animate({
                marginLeft: 0 - scrollVal + 'px'
            },
            "fast");
    }

    //查看左侧隐藏的选项卡
    function scrollTabLeft() {
        var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')));
        // 可视区域非tab宽度
        var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
        //可视区域tab宽度
        var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
        //实际滚动宽度
        var scrollVal = 0;
        if ($(".page-tabs-content").width() < visibleWidth) {
            return false;
        } else {
            var tabElement = $(".menuTab:first");
            var offsetVal = 0;
            while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) { //找到离当前tab最近的元素
                offsetVal += $(tabElement).outerWidth(true);
                tabElement = $(tabElement).next();
            }
            offsetVal = 0;
            if (calSumWidth($(tabElement).prevAll()) > visibleWidth) {
                while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) {
                    offsetVal += $(tabElement).outerWidth(true);
                    tabElement = $(tabElement).prev();
                }
                scrollVal = calSumWidth($(tabElement).prevAll());
            }
        }
        $('.page-tabs-content').animate({
                marginLeft: 0 - scrollVal + 'px'
            },
            "fast");
    }

    //查看右侧隐藏的选项卡
    function scrollTabRight() {
        var marginLeftVal = Math.abs(parseInt($('.page-tabs-content').css('margin-left')));
        // 可视区域非tab宽度
        var tabOuterWidth = calSumWidth($(".content-tabs").children().not(".menuTabs"));
        //可视区域tab宽度
        var visibleWidth = $(".content-tabs").outerWidth(true) - tabOuterWidth;
        //实际滚动宽度
        var scrollVal = 0;
        if ($(".page-tabs-content").width() < visibleWidth) {
            return false;
        } else {
            var tabElement = $(".menuTab:first");
            var offsetVal = 0;
            while ((offsetVal + $(tabElement).outerWidth(true)) <= marginLeftVal) { //找到离当前tab最近的元素
                offsetVal += $(tabElement).outerWidth(true);
                tabElement = $(tabElement).next();
            }
            offsetVal = 0;
            while ((offsetVal + $(tabElement).outerWidth(true)) < (visibleWidth) && tabElement.length > 0) {
                offsetVal += $(tabElement).outerWidth(true);
                tabElement = $(tabElement).next();
            }
            scrollVal = calSumWidth($(tabElement).prevAll());
            if (scrollVal > 0) {
                $('.page-tabs-content').animate({
                        marginLeft: 0 - scrollVal + 'px'
                    },
                    "fast");
            }
        }
    }

    // 给每个菜单遍历加上index序号方便tab进行切换
    function menuindex(){
        $("#side-menu a").each(function(index) {
            if (!$(this).attr('data-index')) {
                $(this).attr('data-index', index);
            }
        });
    }


    function menuItem(that){
        // 获取标识数据
        var dataUrl = $(that).attr('href'), //url
            dataIndex = $(that).data('index'), //菜单唯一id
            menuName = $.trim($(that).text()),  //菜单名称
            flag = true;

        if (dataUrl == undefined || $.trim(dataUrl).length == 0) return false;

        // 选项卡菜单已存在
        $('.menuTab').each(function() {
            if ($(this).data('id') == dataUrl) {
                if (!$(this).hasClass('active')) {
                    $(this).addClass('active').siblings('.menuTab').removeClass('active');
                    scrollToTab(this);
                    // 显示tab对应的内容区
                    $('#content .Liyao_iframe').each(function() {
                        if ($(this).data('id') == dataUrl) {
                            $(this).show().siblings('.Liyao_iframe').hide();
                            return false;
                        }
                    });
                }
                flag = false;
                return false;
            }
        });


        // 选项卡菜单不存在
        if(flag){
            var str = '<a href="javascript:;" class="active menuTab" data-id="' + dataUrl + '">' + menuName + ' <i class="fa fa-times-circle"></i></a>';
            $('.menuTab').removeClass('active');
            // 添加选项卡对应的iframe
            var str1 = '<iframe class="Liyao_iframe" id="iframe' + dataIndex + '"  onload="this.height= this.contentWindow.document.body.scrollHeight + 200 " name="iframe' + dataIndex + '" width="100%"  src="' + dataUrl + '" frameborder="0" data-id="' + dataUrl + '" seamless ></iframe>';
            $('#content').find('iframe.Liyao_iframe').hide().parents('#content').append(str1);
            // 添加选项卡
            $('.menuTabs .page-tabs-content').append(str);
            scrollToTab($('.menuTab.active'));

        }
        return false;
    }


    // 关闭选项卡菜单
    function closeTab() {
        var closeTabId = $(this).parents('.menuTab').data('id');
        var currentWidth = $(this).parents('.menuTab').width();
        // 当前元素处于活动状态
        if ($(this).parents('.menuTab').hasClass('active')) {
            // 当前元素后面有同辈元素，使后面的一个元素处于活动状态
            if ($(this).parents('.menuTab').next('.menuTab').size()) {

                var activeId = $(this).parents('.menuTab').next('.menuTab:eq(0)').data('id');
                $(this).parents('.menuTab').next('.menuTab:eq(0)').addClass('active');

                $('#content .Liyao_iframe').each(function() {
                    if ($(this).data('id') == activeId) {
                        $(this).show().siblings('.Liyao_iframe').hide();
                        return false;
                    }
                });

                var marginLeftVal = parseInt($('.page-tabs-content').css('margin-left'));
                if (marginLeftVal < 0) {
                    $('.page-tabs-content').animate({
                            marginLeft: (marginLeftVal + currentWidth) + 'px'
                        },
                        "fast");
                }

                //  移除当前选项卡
                $(this).parents('.menuTab').remove();

                // 移除tab对应的内容区
                $('#content .Liyao_iframe').each(function() {
                    if ($(this).data('id') == closeTabId) {
                        $(this).remove();
                        return false;

                    }
                });
            }

            // 当前元素后面没有同辈元素，使当前元素的上一个元素处于活动状态
            if ($(this).parents('.menuTab').prev('.menuTab').size()) {
                var activeId = $(this).parents('.menuTab').prev('.menuTab:last').data('id');
                $(this).parents('.menuTab').prev('.menuTab:last').addClass('active');
                $('#content .Liyao_iframe').each(function() {
                    if ($(this).data('id') == activeId) {
                        $(this).show().siblings('.Liyao_iframe').hide();
                        return false;
                    }
                });

                //  移除当前选项卡
                $(this).parents('.menuTab').remove();

                // 移除tab对应的内容区
                $('#content .Liyao_iframe').each(function() {
                    if ($(this).data('id') == closeTabId) {
                        $(this).remove();
                        return false;
                    }
                });
            }
        }
        // 当前元素不处于活动状态
        else {
            //  移除当前选项卡
            $(this).parents('.menuTab').remove();

            // 移除相应tab对应的内容区
            $('#content .Liyao_iframe').each(function() {
                if ($(this).data('id') == closeTabId) {
                    $(this).remove();
                    return false;
                }
            });
            scrollToTab($('.menuTab.active'));
        }
        return false;
    }

    $('.menuTabs').on('click', '.menuTab i', closeTab);

    //关闭其他选项卡
    function closeOtherTabs() {
        $('.page-tabs-content').children("[data-id]").not(":first").not(".active").each(function() {
            $('.Liyao_iframe[data-id="' + $(this).data('id') + '"]').remove();
            $(this).remove();
        });
        $('.page-tabs-content').css("margin-left", "0");
    }
    $('.tabCloseOther').on('click', closeOtherTabs);

    //滚动到已激活的选项卡
    function showActiveTab() {
        scrollToTab($('.menuTab.active'));
    }
    $('.tabShowActive').on('click', showActiveTab);

    // 点击选项卡菜单
    function activeTab() {

        if (!$(this).hasClass('active')) {
            var currentId = $(this).data('id');
            // 显示tab对应的内容区
            $('#content .Liyao_iframe').each(function() {
                if ($(this).data('id') == currentId) {
                    $(this).show().siblings('.Liyao_iframe').hide();
                    return false;
                }
            });
            $(this).addClass('active').siblings('.menuTab').removeClass('active');
            scrollToTab(this);
        }
    }

    // 点击选项卡菜单
    $('.menuTabs').on('click', '.menuTab', activeTab);

    // 关闭全部
    $('.tabCloseAll').on('click', function() {
        $('.page-tabs-content').children("[data-id]").not(":first").each(function() {
            $('.Liyao_iframe[data-id="' + $(this).data('id') + '"]').remove();
            $(this).remove();
        });
        $('.page-tabs-content').children("[data-id]:first").each(function() {
            $('.Liyao_iframe[data-id="' + $(this).data('id') + '"]').show();
            $(this).addClass("active");
        });
        $('.page-tabs-content').css("margin-left", "0");
    });

    // 关闭当前
    $('.tabCloseCurrent').on('click', function () {
        $('.page-tabs-content').find('.active i').trigger("click")
    })

    // 左移按扭
    $('.tabLeft').on('click', scrollTabLeft);

    // 右移按扭
    $('.tabRight').on('click', scrollTabRight);

    //刷新iframe
    function refreshTab() {
        var currentId = $('.page-tabs-content').find('.active').attr('data-id');
        var target = $('.Liyao_iframe[data-id="' + currentId + '"]');
        var url = target.attr('src');
        target.attr('src', url).ready();
    }

    // 刷新按钮
    $('.tabReload').on('click', refreshTab);

});

// 监听资源管理模块的选中上级菜单 展示权限树
$(document).on("click",".parentResource",function(){
    $.ajax({
        url:"/permission/findNotButByAll",
        dataType:"json",
        type:"get",
        success:function(data){
            if(data.ret){
                var topMenu = {
                    name:"顶层菜单",
                    id:0,
                    parentId:"",
                    type:0
                }

                data.data.unshift(topMenu);

                var treeSetting = {
                    data: {
                        simpleData: {
                            enable: true,
                            idKey: "id",
                            pIdKey: "parentId",
                            rootPId: 0
                        }
                    }
                };
                var treeObj = [];
                top.layer.open({
                    type: 1,
                    btn: ['保存', '取消'],
                    offset: '50px',
                    content: '<ul id="permissionTree" class="ztree"></ul>'
                    ,yes: function(index, layero){
                        var node = treeObj.getSelectedNodes();
                        if(node.length==0){
                            layer.msg("请选择一个菜单！",function(){});
                            return;
                        }
                        var parentId = node[0].id;
                        var name = node[0].name;

                        $("#parentResource").val(name);
                        $("#parentId").val(parentId);

                        layer.close(index);


                    }
                });


                treeObj = $.fn.zTree.init($("#permissionTree"), treeSetting, data.data);
                fillter(treeObj);//设置展开前三级

            }
        }
    })
});

//设置 ztree 已三级节点展开
function fillter(treeObj) {
    //获得树形图对象
    var nodeList = treeObj.getNodes();
    for(var i = 0; i < nodeList.length; i++) { //设置节点展开第二级节点
        treeObj.expandNode(nodeList[i], true, false, true);
        var nodespan = nodeList[i].children;
        for(var j = 0; j < nodespan.length; j++) { //设置节点展开第三级节点
            treeObj.expandNode(nodespan[j], true, false, true);
        }
    }
}